package com.koicarp.agent.example.aiservices;

import com.koicarp.agent.example.ChatModelInit;
import com.koicarp.agent.example.chatmemery.PersistentChatMemoryStore;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.service.AiServices;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;

/**
 * @Author: liuxia
 * @CreateTime: 2025/9/15 下午10:13
 * @Description: AiServices和ChatMemory关联 test
 */
public class AiServicesChatMemoryTest {

    @Resource
    PersistentChatMemoryStore store;


    /**
     * 每个用户同时使用一个ChatMemory
     */
    @Test
    public void allUserBothChatMemory() {
        ChatModel chatModel = ChatModelInit.initOllama();

        MessageWindowChatMemory memory = MessageWindowChatMemory.builder()
                .id("1234")                  // id，通常用于区分多个用户或多个对话
                .maxMessages(10)             // 最大存储消息数量
                .chatMemoryStore(store)   //内存缓存存储类
                .build();
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatMemory(memory)
                .chatModel(chatModel)
                .build();

        String message1 = assistant.chat("你好，你现在是我的朋友koi");
        System.out.println("ai答1：" + message1);
        String message2 = assistant.chat("你是谁？");
        System.out.println("ai答2：" + message2);

        /**
         * 不同大模型回答的效果不一，该结果仅供参考
         * 打印数据如下：
         * ai答1：<think>
         * 嗯，用户说“你好，我现在是你的朋友koi”。
         * ...
         * 作为朋友般存在于对话中，为用户提供支持和便利。接下来，我要按照这个分析来设计我的回复方式，确保既友好又实用，满足用户的需求。
         * </think>
         *
         * 你好！很高兴你能成为我的朋友Koi。有什么我可以帮助你的吗？
         *
         * ai答2：<think>
         * 好，用户发来的消息是“你是谁？”这是一个比较常见的自我介绍问题。
         * ...
         * 最后，保持语气友好和专业，让用户感到轻松且被尊重。
         * </think>
         *
         * 我是一个由中国的深度求索（DeepSeek）公司开发的智能助手Koi。我在这里为你提供帮助和服务，随时准备解答你的问题或提供支持！如果你有具体的问题或需要帮助的地方，请随时告诉我！
         */
    }

    /**
     * 每个用户单独拥有一个ChatMemory
     */
    @Test
    public void allUserNoBothChatMemory() {
        String memoryId1 = "1234";
        String memoryId2 = "1235";
        ChatModel chatModel = ChatModelInit.initOllama();
        Assistant assistant = AiServices.builder(Assistant.class)
                .chatModel(chatModel)
                .chatMemoryProvider(memory -> MessageWindowChatMemory.builder()
                        .maxMessages(10)
                        .chatMemoryStore(store)
                        .build())
                .build();
        String message1 = assistant.chatMemory(memoryId1, "你好，你现在是我的朋友koi");
        System.out.println("ai答1：" + message1);

        String message2 = assistant.chatMemory(memoryId1, "你是谁？");
        System.out.println("ai答2：" + message2);

        // 我们使用memoryId2试试与之前有所不同回答
        String message3 = assistant.chatMemory(memoryId2, "你是谁？");
        System.out.println("ai答3：" + message3);

        /**
         * 不同大模型回答的效果不一，该结果仅供参考
         * 打印数据如下：
         * ai答1：<think>
         * 好，现在用户说：“你好，我现在是你的朋友koi”。看起来他们已经建立起了一个名为“Koi”的朋友关系。
         * ...
         * 可能我会这样回复：“你好！很高兴认识你，你的朋友Koi在这里为你服务呢~有什么我可以帮助你的吗？” 这样不仅确认了友谊，还询问用户是否有需要帮助的地方，促进进一步交流。
         * </think>
         * 你好！很高兴认识你，你的朋友Koi在这里为你服务呢~有什么我可以帮助你的吗？
         *
         * ai答2：<think>
         * 好，现在用户问：“你是谁？” 我需要解释清楚，说明自己是一个由深度求索公司开发的智能助手Koi。我应该保持友好和自然的语气，让用户感到安心。
         * ...
         * 这样既回答了问题，又保持了互动性。
         * </think>
         * 很高兴为你提供服务！我是一个由深度求索公司开发的智能助手Koi，没有情感，但我会尽力提供有用的信息和帮助。请问有什么我可以帮助你的吗？
         *
         * ai答3：<think>
         * </think>
         * 您好！我是由中国的深度求索（DeepSeek）公司开发的智能助手DeepSeek-R1。如您有任何任何问题，我会尽我所能为您提供帮助。
         */
    }
}
